package com.dictionary.cn.core;

import java.util.List;

import com.dictionary.cn.core.dictionaryservice.dcitionarybean.Dictionary;
import com.dictionary.cn.core.dictionaryservice.dcitionarybean.TreeDictionary;



public interface DictionaryManager {

    /**
     * 
     * <p>
     * 更具key获取一个value
     * </p>
     * @author xiaoruihu
     * @date 2015-5-28 下午03:27:24
     * @param key
     * @return
     */
    public abstract String getByKey(String type, Object key);

    public abstract String getByKey(String type, Object key, String defaultValue);

    public abstract Dictionary getDicByKey(String type, Object key);
    
    /**
     * 
     * <p>
     * 获取列表 如果没有的话或返回一个空的list 默认启用默认的过滤器
     * 等同于 getAll(type, true)
     * </p>
     * @author xiaoruihu
     * @date 2015-5-28 下午03:27:40
     * @return
     */
    public abstract List<Dictionary> getAll(String type);

    /**
     * 
     * <p>
     * 获取列表 如果没有的话或返回一个空的list 
     * </p>
     * @author xiaoruihu
     * @param isDefaultFilter是否启用默认过滤
     * @date 2015-5-28 下午03:27:40
     * @return
     */
    public abstract List<Dictionary> getAll(String type, boolean isDefaultFilter);

    /**
     * 
     * <p>
     * 根据条件过滤的key 并更具属性排序  如果没有的话或返回一个空的list
     * </p>
     * @author xiaoruihu
     * @date 2015-5-28 下午03:32:13
     * @param filterProperty  过滤属性
     * @return
     */
    public abstract List<Dictionary> getAll(String type, FilterProperty<Dictionary> filterProperty);
    
    /**
     * 
     * <p>
     * 获取子节点  默认启用过滤
     * </p>
     * @author xiaoruihu
     * @date 2015-6-4 下午12:33:09
     * @param type
     * @param parent
     * @return
     */
    public abstract List<TreeDictionary> getChildren(String type, Object parent);

    /**
     * 
     * <p>
     * ]获取子节点
     * </p>
     * @author xiaoruihu
     * @date 2015-6-4 下午12:23:43
     * @param type
     * @param parent
     * @param isDefaultFilter是否启用默认过滤
     * @return
     */
    public abstract List<TreeDictionary> getChildren(String type, Object parent,
            boolean isDefaultFilter);
    /**
     * 获取子节点
     */
    public abstract List<TreeDictionary> getChildren(String type, Object parent,
            FilterProperty<Dictionary> filterProperty);

    /**
     * 
     * <p>
     * 刷新字典
     * </p>
     * @author xiaoruihu
     * @date 2015-5-28 下午03:33:21
     */
    public abstract void flush(String type);

}
